﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data.SqlClient;
using System.Data;
namespace ADOConectado
{
    public static class dbProductos
    {
        // se utiliza para el boron buscar, lista todos los produstos o filtra segun los parametros
        public static List<Producto> BuscarProductos(string paramCodProd, string paramNombreProd, string paramMarca) 
        {
            List<Producto> lstProductos = new List<Producto>();
            SqlConnection objConexion = new SqlConnection(Conexiones.StringConexion);
            objConexion.Open();
            SqlCommand dataCommand = new SqlCommand("BuscarProductos", objConexion);
            dataCommand.CommandType = CommandType.StoredProcedure;
            if (paramCodProd != "")
                dataCommand.Parameters.AddWithValue("@intCodProd", paramCodProd);
            else
                dataCommand.Parameters.AddWithValue("@intCodProd", System.DBNull.Value);
            if (paramNombreProd != "")
                dataCommand.Parameters.AddWithValue("@varNombreProducto", paramNombreProd);
            else
                dataCommand.Parameters.AddWithValue("@varNombreProducto", System.DBNull.Value);
            if (paramMarca != "")
                dataCommand.Parameters.AddWithValue("@varMarca", paramMarca);
            else
                dataCommand.Parameters.AddWithValue("@varMarca", System.DBNull.Value);
            SqlDataReader objReader = dataCommand.ExecuteReader();

            try
            {
                while (objReader.Read())
                {
                    Producto objProducto = new Producto(objReader["varNombreProducto"].ToString(), objReader["varMarca"].ToString(), objReader["varModelo"].ToString(), Convert.ToDecimal(objReader["decPrecio"]), Convert.ToInt32(objReader["intCantidad"]), (objReader["varDescripcion"]).ToString(), Convert.ToInt32(objReader["intCodProducto"]));

                    lstProductos.Add(objProducto);
                }
                return lstProductos;
            }
            catch (Exception ex)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            finally
            {
                objConexion.Close();
            }
        }

        public static List<Producto> BuscarProductosParaVender(string paramCodProd, string paramNombreProd, string paramMarca)
        {
            List<Producto> lstProductos = new List<Producto>();
            SqlConnection objConexion = new SqlConnection(Conexiones.StringConexion);
            objConexion.Open();
            SqlCommand dataCommand = new SqlCommand("BuscarProductos", objConexion);
            dataCommand.CommandType = CommandType.StoredProcedure;
            if (paramCodProd != "")
                dataCommand.Parameters.AddWithValue("@intCodProd", paramCodProd);
            else
                dataCommand.Parameters.AddWithValue("@intCodProd", System.DBNull.Value);
            if (paramNombreProd != "")
                dataCommand.Parameters.AddWithValue("@varNombreProducto", paramNombreProd);
            else
                dataCommand.Parameters.AddWithValue("@varNombreProducto", System.DBNull.Value);
            if (paramMarca != "")
                dataCommand.Parameters.AddWithValue("@varMarca", paramMarca);
            else
                dataCommand.Parameters.AddWithValue("@varMarca", System.DBNull.Value);
            SqlDataReader objReader = dataCommand.ExecuteReader();

            try
            {
                while (objReader.Read())
                {
                    Producto objProducto = new Producto(objReader["varNombreProducto"].ToString(), objReader["varMarca"].ToString(), objReader["varModelo"].ToString(), Convert.ToDecimal(objReader["decPrecio"]), 1, (objReader["varDescripcion"]).ToString(), Convert.ToInt32(objReader["intCodProducto"]));

                    lstProductos.Add(objProducto);
                }
                return lstProductos;
            }
            catch (Exception ex)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            finally
            {
                objConexion.Close();
            }
        }

        public static Producto BuscarProductos(int paramCodProd)
        {
            SqlDataReader objReader = null;
            SqlConnection objConexion = new SqlConnection(Conexiones.StringConexion);
            SqlCommand objCommand = new SqlCommand("SELECT * FROM Productos WHERE intCodProducto=@intCodProd", objConexion);
            SqlParameter objID = new SqlParameter("@intCodProd", paramCodProd);
            objCommand.Parameters.Add(objID);
            objConexion.Open();
            objReader = objCommand.ExecuteReader();
            if (objReader.Read() == true)
            {
                Producto objProducto = new Producto( objReader["varNombreProducto"].ToString(), objReader["varMarca"].ToString(), objReader["varModelo"].ToString(), Convert.ToDecimal(objReader["decPrecio"]), Convert.ToInt32(objReader["intCantidad"]), objReader["varDescripcion"].ToString(), Convert.ToInt32(objReader["intCodProducto"]));
                return objProducto;
            }
            else
            {
                return null;
            }
        }

        //se utiliza para insertar un nuevo producto no pasamos el codProd por q es identii
        public static void Insertar(Producto paramProducto)
        {
            SqlConnection objConexion = new SqlConnection(Conexiones.StringConexion);
            objConexion.Open();
            SqlCommand dataCommand = new SqlCommand("AgregarProducto", objConexion);
            dataCommand.CommandType = CommandType.StoredProcedure;
            dataCommand.Parameters.AddWithValue("@varMarca", paramProducto.Marca);
            dataCommand.Parameters.AddWithValue("@varModelo", paramProducto.Modelo);
            dataCommand.Parameters.AddWithValue("@varNombreProducto", paramProducto.NombreProducto);
            dataCommand.Parameters.AddWithValue("@decPrecio", paramProducto.Precio);
            dataCommand.Parameters.AddWithValue("@intCantidad", paramProducto.cantidad);
            dataCommand.Parameters.AddWithValue("@varDescripcion", paramProducto.Descripcion);
            
            dataCommand.ExecuteNonQuery();
        }

        public static void Modificar(Producto paramProducto)
        {
            SqlConnection objConexion = new SqlConnection(Conexiones.StringConexion);
            objConexion.Open();
            SqlCommand dataCommand = new SqlCommand("ModificarProducto", objConexion);
            dataCommand.CommandType = CommandType.StoredProcedure;
            dataCommand.Parameters.AddWithValue("@varMarca", paramProducto.Marca);
            dataCommand.Parameters.AddWithValue("@varModelo", paramProducto.Modelo);
            dataCommand.Parameters.AddWithValue("@varNombreProducto", paramProducto.NombreProducto);
            dataCommand.Parameters.AddWithValue("@decPrecio", paramProducto.Precio);
            dataCommand.Parameters.AddWithValue("@intCantidad", paramProducto.cantidad);
            dataCommand.Parameters.AddWithValue("@varDescripcion", paramProducto.Descripcion);
            dataCommand.Parameters.AddWithValue("@intCodProd", paramProducto.CodigoProducto);
            dataCommand.ExecuteNonQuery();
        }

        public static int Eliminar(int paramCodProd)
        {
            SqlConnection objConexion = new SqlConnection(Conexiones.StringConexion);
            SqlCommand objCommand = new SqlCommand("DELETE FROM Productos WHERE intCodProducto = @paramCodProd", objConexion);
            SqlParameter objID = new SqlParameter("@paramCodProd", paramCodProd);
            objCommand.Parameters.Add(objID);
            objConexion.Open();
            return objCommand.ExecuteNonQuery();
            objConexion.Close();
              
        }
    }
}
